from rest_framework.generics import ListAPIView
from rest_framework.viewsets import ModelViewSet
from goods.models import SKU,GoodsCategory, SPU, SPUSpecification
from meiduo_admin.my_paginate import MyPageNumberPagination
from meiduo_admin.sku import sku_serializers

class SKUViewSet(ModelViewSet):
    pagination_class = MyPageNumberPagination # 分页还是用原来的方法，因为前端要的格式是一样的
    serializer_class = sku_serializers.SKUViewSetSerializer # 这是自己写的序列化器
    # queryset = SKU.objects.all()

    #想要完成后台商品搜索的功能，就不能写死，所以，要重写get_queryset方法
    def get_queryset(self):
        #获取前端发送过来的搜索关键字
        keyword = self.request.query_params.get('keyword')
        # 判断
        if keyword:
            return SKU.objects.filter(name__contains=keyword).all()
        else:
            return SKU.objects.all()




# 新增商品时分类的显示，显示的是三级分类，所以，查出三级分类返回即可
class SKUCategoryView(ListAPIView):  # 因为只是涉及查询，所以用二级视图即可
    # 使用自己写的序列化器
    serializer_class = sku_serializers.SKUCategorySerializer
    # 因为这时要展示的是三级分类，所以，不能查询所有
    queryset = GoodsCategory.objects.filter(subs=None)  #subs是子级的意思，在这里，没有子级，查出来的就是三级分类的数据


# 将spu表的数据展示在sku的新增页面
class SKUGoodSimpleView(ListAPIView):
    serializer_class = sku_serializers.SKUGoodSimpleSerializer
    queryset = SPU.objects.all()


#4, sku的商品规格信息
class SKUGoodSpecsView(ListAPIView):
    """找到路径，然后写路由，然后写视图，再写一个序列化器，模型类基于对应的，因为路径中有参数，只能重写get_queryset方法"""
    serializer_class = sku_serializers.SKUGoodSpecsSerializer
    # queryset = SPUSpecification.objects.all() # 由于请求路径中有匹配，所以，这样取取不出来里面的参数，只能重写

    # 重写获取数据源
    def get_queryset(self):
        spu_id = self.kwargs.get('spu_id') # 取出路径中的参数
        # 当传进来的id等于时，要查的就是它
        return SPUSpecification.objects.filter(spu_id=spu_id).all()
